/*
 * Buffer_texto.cpp
 *
 *  Created on: 08/06/2010
 *      Author: juan
 */

#include "Buffer_entrada.h"

Buffer_entrada::Buffer_entrada(FILE * archivo_entrada,int tam_buffer) {

	//inicializo el tamanio del buffer y el buffer
	this->tamanio_buffer = tam_buffer;
	this->buffer = new char[tam_buffer];
	this->archivo = archivo_entrada;
	this->cargar_buffer();
}

void Buffer_entrada::cargar_buffer() {
	//lleno el buffer
	unsigned int bytesLeidos;
	bytesLeidos = fread(this->buffer,1,this->tamanio_buffer,this->archivo);
	tamanio_ocupacion = bytesLeidos;
	this->cant_leidos = 0;
}

TLetraExt Buffer_entrada::get_caracter(){

	TLetraExt retorno = FIN_DE_ARCHIVO;

	//Si el caracter q se va a leer no es el ultimo del buffer o es el ultimo del buffer y tambien del archivo
	if(cant_leidos < tamanio_ocupacion-1 || (cant_leidos == tamanio_ocupacion-1 && tamanio_ocupacion != tamanio_buffer)){

		retorno =  (TLetra) buffer[cant_leidos];
		cant_leidos++;
	}else if (cant_leidos == tamanio_ocupacion-1 && tamanio_ocupacion == tamanio_buffer ){

		//si voy a leer el ultimo del buffer y no del archivo entonces lleno el buffer
		retorno =  (TLetra) buffer[cant_leidos];
		this->cargar_buffer();
	}

	return retorno;
}

Buffer_entrada::~Buffer_entrada() {

	if(this->buffer)
		delete[] buffer;
}
